package br.ufscar.acumaaf.smc.persistence;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DataBaseHelper extends SQLiteOpenHelper{
	
	/**
	 * FILTRO PARA O LOGCAT
	 */
	public static final String FILTRO = "smcbd";
	
	/**
	 * BANCO DE DADOS
	 */
	//Nome do Banco de Dados
	public static final String NOME_BANCO = "smcdb.db";
	//Controle de versão do Banco de Dados
	private static final int VERSAO_BANCO = 1;
	
	/**
	 * SCRIPTS DAS TABELAS
	 */
	private static final String SQL_CRIA_TABELA_DADOSESSAO = "CREATE  TABLE IF NOT EXISTS dadosessao (codigodadosessao INTEGER PRIMARY KEY, codigousuario INTEGER, codigoinstrumentocoleta INTEGER, codigosessao INTEGER, valor VARCHAR(20));";
	private static final String SQL_CRIA_TABELA_GRUPOATIVIDADEFISICA = "CREATE  TABLE IF NOT EXISTS grupoatividadefisica (codigogrupoatividadefisica INTEGER PRIMARY KEY, nome VARCHAR(50), horainicio VARCHAR(10), horafim VARCHAR(10));";
	private static final String SQL_CRIA_TABELA_MATRICULAUSUARIOGRUPOATIVIDADEFISICA = "CREATE  TABLE IF NOT EXISTS matriculausuariogrupoatividadefisica (codigomatriculausuariogrupoatividadefisica INTEGER PRIMARY KEY, codigogrupoatividadefisica INTEGER, codigousuario INTEGER);";
	private static final String SQL_CRIA_TABELA_SESSAO = "CREATE  TABLE IF NOT EXISTS sessao (codigosessao INTEGER PRIMARY KEY, data DATE, codigogrupoatividadefisica INTEGER, descricao VARCHAR(300), sincronizar INTEGER, excluir INTEGER);";
	private static final String SQL_CRIA_TABELA_USUARIO = "CREATE  TABLE IF NOT EXISTS usuario (codigousuario INTEGER PRIMARY KEY, nome VARCHAR(50), usuario VARCHAR(30), senha VARCHAR(30), tipousuario INTEGER);";	
	private static final String SQL_DELETA_TABELA_DADOSESSAO = "DROP TABLE IF EXISTS dadosessao";
	private static final String SQL_DELETA_TABELA_GRUPOATIVIDADEFISICA = "DROP TABLE IF EXISTS grupoatividadefisica";
	private static final String SQL_DELETA_TABELA_MATRICULAUSUARIOGRUPOATIVIDADEFISICA = "DROP TABLE IF EXISTS matriculausuariogrupoatividadefisica";
	private static final String SQL_DELETA_TABELA_SESSAO = "DROP TABLE IF EXISTS sessao";
	private static final String SQL_DELETA_TABELA_USUARIO = "DROP TABLE IF EXISTS usuario";
	/**
	 * CONSTRUTOR
	 */	
	public DataBaseHelper(Context context){
		super(context, NOME_BANCO, null, VERSAO_BANCO);
	}
	
	/**
	 * MÉTODOS
	 */
	//Cria o novo Banco de Dados
	public void onCreate(SQLiteDatabase db){
		Log.i(FILTRO,"DataBaseHelper:onCreate | Criando o Banco de Dados com o SQL");
		//Executa cada SQL de criação
		db.execSQL(SQL_CRIA_TABELA_DADOSESSAO);
		Log.i(FILTRO, "DataBaseHelper:onCreate - Tabela dadosessao criada!");
		db.execSQL(SQL_CRIA_TABELA_GRUPOATIVIDADEFISICA);
		Log.i(FILTRO, "DataBaseHelper:onCreate - Tabela grupoatividadefisica criada!");
		db.execSQL(SQL_CRIA_TABELA_MATRICULAUSUARIOGRUPOATIVIDADEFISICA);
		Log.i(FILTRO, "DataBaseHelper:onCreate - Tabela matriculausuariogrupoatividadefisica criada!");
		db.execSQL(SQL_CRIA_TABELA_SESSAO);
		Log.i(FILTRO, "DataBaseHelper:onCreate - Tabela sessao criada!");
		db.execSQL(SQL_CRIA_TABELA_USUARIO);
		Log.i(FILTRO, "DataBaseHelper:onCreate - Tabela usuario criada!");
	}

	//Atualiza o Banco de Dados se a versão mudou
	public void onUpgrade(SQLiteDatabase db, int versaoAntiga, int versaoNova) {
		Log.w(FILTRO,"DataBaseHelper:onUpgrade | Atualizando o Banco de Dados da versão [" + versaoAntiga + "] para a versão [" + versaoNova + "]. Todas as tabelas serão deletadas!");
		//Executa cada SQL de deleção das tabelas existentes
		db.execSQL(SQL_DELETA_TABELA_DADOSESSAO);
		Log.i(FILTRO,"DataBaseHelper:onUpgrade - Tabela dadosessao deletada!");
		db.execSQL(SQL_DELETA_TABELA_GRUPOATIVIDADEFISICA);
		Log.i(FILTRO,"DataBaseHelper:onUpgrade - Tabela grupoatividadefisica deletada!");
		db.execSQL(SQL_DELETA_TABELA_MATRICULAUSUARIOGRUPOATIVIDADEFISICA);
		Log.i(FILTRO,"DataBaseHelper:onUpgrade - Tabela matriculausuariogrupoatividadefisica deletada!");
		db.execSQL(SQL_DELETA_TABELA_SESSAO);
		Log.i(FILTRO,"DataBaseHelper:onUpgrade - Tabela sessao deletada!");
		db.execSQL(SQL_DELETA_TABELA_USUARIO);
		Log.i(FILTRO, "DataBaseHelper:onUpgrade - Tabela usuario deletada!");
		
		//Cria o Banco de dados novamente
		onCreate(db);
		Log.i(FILTRO,"DataBaseHelper:onUpgrade | Criando o Banco de Dados " + NOME_BANCO + " novamente.");
	}	
}